package org.example.basic.lambda.stream;



import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

/**
 * 〈stream常用方法〉<br>
 *
 * @author Mr.Wang
 * @create 2022/1/9
 */
public class StreamCommonMethod {

    /**
     * Stream常用方法
     * 方法名          方法作用            返回值类型           方法种类
     * count          统计个数            long                终结
     * forEach        逐一处理            void                终结
     * filter         过滤               Stream              函数拼接
     * limit          取用前几个          stream              函数拼接
     * skip           跳过前几个          Stream              函数拼接
     * map            映射               Stream              函数拼接
     * concat         组合               Stream              函数拼接
     *
     * 终结方法：返回值不再是Stream类型的方法，不再支持链式调用
     * 非终结方法：返回值依然是Stream类型的方法，支持链式调用（除了终结方法外，其余的方法都为非终结方法。）
     *
     * Stream注意⚠️事项：
     * 1、Stream只能调用一次
     * 2、Stream方法返回的新流
     * 3、Stream不调用终结方法，中间的操作不会执行
     */

    /**
     * @Author Mr.Wang
     * @Description Stream的常用方法
     * 1、只保留名字长度超过三的姓名
     * 2、第一个队伍筛选前三个
     * 3、第二个队伍只要姓张的
     * 4、第二个队伍筛选之后不要前两个
     * 5、将两个对胡合并到一起
     * 6、根据姓名创建person对象
     * 7、打印整个队伍的person对象
     **/
    public static void main(String[] args) {
        List<String> list = Arrays.asList("迪丽热巴", "叶赫那拉", "周杰伦", "五大吧啦", "小蜜蜂", "妞子", "奶牛", "河工");
        List<String> list2 = Arrays.asList("格林尼治", "古力娜扎", "周星驰", "张三", "李四", "张皇姑", "妞灰烬", "迷宫和");
        //1、
        Stream<String> stream = list.stream().filter(s->s.length()==3).limit(3);
        stream.forEach(System.out::println);
    }
}